// 工具函数：计算当前周次
function calculateCurrentWeek(startDate, totalWeeks) {
  const start = new Date(startDate);
  const now = new Date();
  
  // 清除时间部分，仅比较日期
  start.setHours(0, 0, 0, 0);
  now.setHours(0, 0, 0, 0);

  // 课程未开始
  if (now < start) return 0;

  // 计算日期差（毫秒 → 天）
  const diffTime = now - start;
  const diffDays = Math.floor(diffTime / (1000 * 60 * 60 * 24));

  // 计算周次（从1开始）
  const currentWeek = Math.floor(diffDays / 7) + 1;

  // 超过总周数
  return currentWeek > totalWeeks ? 0 : currentWeek;
}
Page({
  data: {
    // 修改周数数组的生成方式，确保从第1周开始
    weeks: Array.from({length: 20}, (_, i) => `第${i + 1}周`),  // 保持不变
    currentWeek: 0,  // 当前周的索引
    weekdays: ['周一', '周二', '周三', '周四', '周五', '周六', '周日'],
    timeSlots: ['第一节', '第二节', '第三节', '第四节', '第五节', '第六节', '第七节', '第八节'],
    courseList: [],
    colors: ['#FF9966', '#99CCFF', '#99CC99', '#FF99CC', '#FFCC99', '#99CCCC'],
    displayWeek: 1  // 新增：用于显示当前是第几周
  },

  // 切换周数
  onWeekChange(e) {
    const weekIndex = parseInt(e.detail.value)
    this.setData({
      currentWeek: weekIndex,
      displayWeek: weekIndex + 1  // 更新显示的周数
    })
  },
  onLoad() {
    this.fetchCourseList()
  },

  onShow() {
    // 每次显示页面时刷新数据，使用{enableCache:false}确保获取最新数据
    this.fetchCourseList(true);
    console.log('[课表] 页面显示，刷新课程数据');
  },

  // 下拉刷新处理
  async onPullDownRefresh() {
    console.info('执行了下拉刷新...');

    // 设置超时定时器
    const refreshTimeout = setTimeout(() => {
      wx.stopPullDownRefresh();
      wx.showToast({ title: '刷新超时', icon: 'none' });
    }, 10000); // 10秒超时
    
    try {
      // 执行刷新逻辑
      await this.fetchCourseList(true);
      
      // 刷新成功
      wx.showToast({ title: '刷新成功', icon: 'success' });
    } catch (err) {
      console.error('刷新失败:', err);
      wx.showToast({ title: '刷新失败', icon: 'none' });
    } finally {
      // 清除超时定时器
      clearTimeout(refreshTimeout);
      wx.stopPullDownRefresh();
    }
  },
  

  // 下拉刷新处理
async onPullDownRefresh() {
  console.info('执行了下拉刷新...');

  // 设置超时定时器
  const refreshTimeout = setTimeout(() => {
    wx.stopPullDownRefresh();
    wx.showToast({ title: '刷新超时', icon: 'none' });
  }, 10000); // 10秒超时
  
  try {
    // 执行刷新逻辑
    await this.fetchCourseList();
    
    // 刷新成功
    wx.showToast({ title: '刷新成功', icon: 'success' });
  } catch (err) {
    console.error('刷新失败:', err);
    wx.showToast({ title: '刷新失败', icon: 'none' });
  } finally {
    // 清除超时定时器
    clearTimeout(refreshTimeout);
    wx.stopPullDownRefresh();
  }
},
  // 获取课程列表
async fetchCourseList() {
  try {
    wx.showLoading({
      title: '加载中...'
    })
    // 使用 app.js 中的 getDB 方法获取数据库实例
    const app = getApp();
    const db = app.getDB();
    // 获取有效的教师ID
    const teacherId = wx.getStorageSync('teacherId');
    if (!teacherId) {
      wx.showToast({ title: '请先登录', icon: 'none' });
      return;
    }

    // 从云数据库获取课程数据
    const res = await db.collection('courses')
      .where({
        teacherId: wx.getStorageSync('teacherId') || 'teacher001'
      })
      .get()
    console.log('老师id',teacherId)
    console.log('原始课程数据：', res.data)

    // 处理课程数据，调整为正确的索引，并计算当前周次
    const courseList = res.data.map(course => {
      const currentWeek = calculateCurrentWeek(course.startDate, parseInt(course.totalWeeks));
      return {
        ...course,
        // weekday 从"0"开始
        weekday: parseInt(course.weekday),
        // timeSlot 从"0"开始
        timeSlot: parseInt(course.timeSlot),
        color: this.data.colors[Math.floor(Math.random() * this.data.colors.length)],
        currentWeek
      };
    }).filter(course => course.currentWeek > 0); // 过滤掉未开始或已结束的课程

    console.log('处理后的课程数据：', courseList)

    this.setData({ 
      courseList 
    }, () => {
      console.log('设置后的课程列表：', this.data.courseList)
    })

    wx.hideLoading()

  } catch (err) {
    console.error('获取课程列表失败：', err)
    wx.hideLoading()
    wx.showToast({
      title: '获取课程失败',
      icon: 'none'
    })
  }
},



 
// 显示课程详情
showCourseDetail(e) {
  const { time, day } = e.currentTarget.dataset;
  // 根据点击的位置查找课程
  const course = this.data.courseList.find(c => 
    c.weekday === (day ) && c.timeSlot === (time )
  );
  console.log('坐标：', time, 'day', day);
  if (course) {
    // 如果该位置有课程，显示编辑/删除选项以及学生列表
    const db = wx.cloud.database();
    db.collection('course_students').where({
      courseId: course._id
    }).get().then(res => {
      const students = res.data;
      const studentNames = students.map(student => student.studentName).join(', ');
      const itemList = ['编辑课程', '删除课程'];
      // if (students.length > 0) {
      //   itemList.push('查看学生列表');
      // }前端页面也要添加。
      wx.showActionSheet({
        itemList: itemList,
        success: (res) => {
          if (res.tapIndex === 0) {
            // 编辑课程
            wx.navigateTo({
              url: `/pages/schedule/add-course/add-course?courseId=${course._id}`,
              success: (res) => {
                console.log('跳转到编辑页面成功', res);
              },
              fail: (err) => {
                console.error('跳转失败', err);
                wx.showToast({
                  title: '页面跳转失败',
                  icon: 'none'
                });
              }
            });
          } else if (res.tapIndex === 1) {
            // 删除课程
            wx.showModal({
              title: '确认删除',
              content: '确定要删除这节课程吗？',
              success: (res) => {
                if (res.confirm) {
                  this.deleteCourse(course._id);
                }
              }
            });
          } else if (res.tapIndex === 2) {
            // 查看学生列表
            wx.showModal({
              title: '学生列表',
              content: studentNames,
              showCancel: false
            });
          }
        }
      });
    }).catch(err => {
      console.error('查询学生列表失败：', err);
      wx.showToast({
        title: '查询学生列表失败',
        icon: 'none'
      });
    });
  } else {
    // 如果该位置没有课程，直接跳转到添加页面
    wx.navigateTo({
      url: `/pages/schedule/add-course/add-course?weekday=${day }&timeSlot=${time }`,
      success: (res) => {
        console.log('跳转到添加页面成功', res);
      },
      fail: (err) => {
        console.error('跳转失败', err);
        wx.showToast({
          title: '页面跳转失败',
          icon: 'none'
        });
      }
    });
  }
},

// 删除课程
async deleteCourse(courseId) {
  try {
    wx.showLoading({
      title: '删除中...'
    })

     // 修改为使用 app.getDB() 获取数据库实例
     const app = getApp();
     const db = app.getDB();
    
    await db.collection('courses').doc(courseId).remove()
    // 取消与该课程相关的所有提醒
    await app.cancelCourseReminders(this.data.courseId);
    wx.hideLoading()
    wx.showToast({
      title: '删除成功',
      icon: 'success'
    })
    
    // 重新获取课程列表
    this.fetchCourseList()

  } catch (err) {
    console.error('删除课程失败：', err)
    wx.hideLoading()
    wx.showToast({
      title: '删除失败',
      icon: 'none'
    })
  }
},
  // 编辑课程
  editCourse(course) {
    wx.navigateTo({
      url: `/pages/schedule/add-course/add-course?courseId=${course._id}`
    })
  },

  // 删除课程
  async deleteCourse(courseId) {
    try {
       // 修改为使用 app.getDB() 获取数据库实例
    const app = getApp();
    const db = app.getDB();

      await db.collection('courses').doc(courseId).remove()
      
      wx.showToast({
        title: '删除成功',
        icon: 'success'
      })
      
      // 重新获取课程列表
      this.fetchCourseList()

    } catch (err) {
      console.error('删除课程失败：', err)
      wx.showToast({
        title: '删除失败',
        icon: 'none'
      })
    }
  },

  // 显示添加课程页面
  showAddCourse() {
    console.log('run to add course ...')
    wx.navigateTo({
      url: '/pages/schedule/add-course/add-course',
      success: (res) => {
        console.log('跳转成功', res)
      },
      fail: (err) => {
        console.error('跳转失败', err)
        wx.showToast({
          title: '页面跳转失败',
          icon: 'none'
        })
      }
    })
  }
})